import * as fs from "fs";
import { isExistPath } from "../utils/fs";
import { success, fail, interceptDomain } from "../utils/base";
import { getBDCConfig } from "../utils/lokijs-db-server";

export default defineEventHandler(async (event) => {
  interceptDomain(event);
  // 获取请求参数 get
  const body = getQuery(event);
  // console.log("获取请求参数：", body);
  // 获取 LokiJS 实例
  const db = event.context.db;
  // 1. 读取配置文件
  const { configData, configPath } = getBDCConfig();
  console.log("当前使用的数据库名称:", db.filename);

  /********* start 清空集合数据 start *********/
  if (body.collectionName && body.errorId === "all_zhj") {
    if (configData.dbs && configData.dbs.length > 0) {
      try {
        const { selfList } = (await getOtherDbData(configData.dbs, "")) as any;
        if (selfList && selfList.length > 0) {
          selfList.forEach((e: any) => {
            console.log("e的 name", e.filename == db.filename);
            let collection = e.getCollection(body.collectionName);
            if (e.filename == db.filename) {
              collection = db.getCollection(body.collectionName);
              if (collection) {
                // 清空集合中的所有数据
                collection.findAndRemove();
                db.saveDatabase((err: any) => {
                  if (err) {
                    console.error("清空数据库出错：", err);
                  } else {
                    console.log("清空,保存");
                  }
                });
              }
            } else {
              if (collection) {
                // 清空集合中的所有数据
                collection.findAndRemove();
                e.saveDatabase((err: any) => {
                  if (err) {
                    console.error("清空数据库出错：", err);
                  } else {
                    console.log("清空,保存");
                  }
                });
              }
            }
          });
        }
      } catch (error) {
        console.log("error:", error);
        return fail({ msg: "删除失败", error });
      }
    }
    return success("清空成功,等待 1 秒,在查询");
  }

  /********* 需要删除文件: 1.文件保存出错的场景 *******/
  if (body.filePath) {
    if (body.errorId === "all_zhj") {
      try {
        let deletePath = body.filePath;
        if (!deletePath && removeDb) deletePath = removeDb.path;
        if (deletePath) {
          const isExist = await isExistPath(deletePath);
          if (isExist) {
            fs.unlinkSync(deletePath);
            return success("删除文件成功");
          } else {
            return fail("文件不存在");
          }
        } else {
          return fail("deletePath 不存在");
        }
      } catch (error: any) {
        return fail(`删除成功文件失败${error.message}`);
      }
    }
  }

  if (!db) return fail("DB 实例不存在");
  if (!body.dbName) return fail("请传入删除数据,所在的数据库名称");
  // 筛选出,要操作的 DB
  const removeDb = configData.dbs.find((e: any) => {
    return e.path.includes(body.dbName);
  });

  /********* start 删除指定时间段的集合数据 start *********/
  // if (body.errorId) {

  // }

  /********* start 根据错误 id 删除数据 start *********/
  if (body.errorId) {
    // 是不是当前数据库?
    if (db.filename.includes(body.dbName)) {
      let dbData = db.getCollection("watchErrLog");
      // dbData.ensureIndex("errorId"); // 在 'errorId' 字段上创建索引
      // dbData.removeWhere({ errorId: Number(body.errorId) }); // 删除所有  errorId == body.errorId
      dbData.removeWhere((obj: any) => {
        return obj.data.errorId == body.errorId;
      });
      db.saveDatabase((err: any) => {
        if (err) {
          console.error("1 手动保存数据库出错：", err);
        } else {
          console.log("1 数据库已手动保存");
        }
      });
    } else {
      try {
        const { selfList } = (await getOtherDbData(
          [removeDb],
          "watchErrLog"
        )) as any;

        let collection = selfList[0].getCollection("watchErrLog");
        // 删除数据
        collection.removeWhere((obj: any) => {
          return obj.data.errorId == body.errorId;
        });

        selfList[0].saveDatabase((err: any) => {
          if (err) {
            console.error("1 手动保存数据库出错：", err);
          } else {
            console.log("1 数据库已手动保存");
          }
        });
      } catch (error) {
        return fail({ msg: "删除失败", error });
      }
    }
    return success("删除成功,等待 1 秒,在查询");
  } else {
    return fail("请传入参数errorId");
  }
});
